home *** CD-ROM | disk | FTP | other *** search
- unit UnitComboPluricolonna;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, DB, ADODB;
-
- type
- TFormComboPluricolonna = class(TForm)
- ConnessioneCombo: TADOConnection;
- TablePersone: TADOTable;
- ComboPluricolonna: TComboBox;
- TablePersoneID: TAutoIncField;
- TablePersoneCognome: TWideStringField;
- TablePersoneNome: TWideStringField;
- TablePersoneData_di_nascita: TDateTimeField;
- TablePersoneLuogo_di_nascita: TWideStringField;
- TablePersoneCodice_fiscale: TWideStringField;
- TablePersoneAttivo: TBooleanField;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Data_di_nascita: TEdit;
- Luogo_di_nascita: TEdit;
- Codice_fiscale: TEdit;
- Utente_Attivo: TLabel;
- procedure FormActivate(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure ComboPluricolonnaDrawItem(Control: TWinControl;
- Index: Integer; Rect: TRect; State: TOwnerDrawState);
- procedure ComboPluricolonnaChange(Sender: TObject);
- procedure ComboPluricolonnaKeyPress(Sender: TObject; var Key: Char);
- private
- { Private declarations }
- OffSetColonnaCombo : Integer; // Variabile che contiene il numero in pixel
- // dell'offset del secondo campo all'interno
- // del canvas del ComboBox
- public
- { Public declarations }
- end;
-
- const
- PercorsoConnessione : String = 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +
- 'Data Source=DatiCombo.mdb;Mode=Share Deny None;' +
- 'Extended Properties=""';
-
- var
- FormComboPluricolonna: TFormComboPluricolonna;
-
- implementation
-
- {$R *.dfm}
-
- procedure TFormComboPluricolonna.FormCreate(Sender: TObject);
- var
- Width : Integer; // Dimensione massima in pixel occupata dalle stringhe di testo
- // Cognome e Nome
- begin
-
- ConnessioneCombo.ConnectionString := PercorsoConnessione;
- ConnessioneCombo.Connected := true;
-
- TablePersone.Active := true;
-
- // W Φ il carattere che occupa pi∙ pixel orizzontali tra i font true-type a
- // spaziatura non fissa; sapendo che il campo ha al pi∙ 20 caratteri, possiamo
- // stabilire la dimensione orizzontale del controllo ComboBox aggiungendo un
- // margine di 20 pixel per la banda di scorrimento verticale.
- Width := ComboPluricolonna.Canvas.TextWidth('W');
- ComboPluricolonna.Width := 2 * 20 * Width + 20;
- ComboPluricolonna.Clear;
-
- OffSetColonnaCombo := 20 * Width + 5;
-
- end;
-
- procedure TFormComboPluricolonna.FormActivate(Sender: TObject);
- var
- Attivo : char; // Carattere che contiene la codifica di un dato booleano:
- // 'T' = true
- // 'F' = false
- begin
-
- // Precaricamento dei dati nel controllo ComboBox
- TablePersone.First;
- while not TablePersone.Eof do
- begin
- if TablePersone.FieldByName('Attivo').AsBoolean then
- Attivo := 'T'
- else
- Attivo := 'F';
- ComboPluricolonna.Items.Add(TablePersone.Fields[1].AsString + #13 +
- TablePersone.Fields[2].AsString + #13 +
- IntToStr(TablePersone.Fields[0].AsInteger) + #13 +
- Attivo);
- TablePersone.Next;
- end;
-
- Data_di_nascita.Clear;
- Luogo_di_nascita.Clear;
- Codice_Fiscale.Clear;
- Utente_Attivo.Font.Color := clBlack;
- Utente_Attivo.Caption := '';
-
- end;
-
- procedure TFormComboPluricolonna.ComboPluricolonnaDrawItem(
- Control: TWinControl; Index: Integer; Rect: TRect;
- State: TOwnerDrawState);
- var
- S1, S2, S3, S4 : String; // Le 4 sottostringhe di cui si compone la stringa di testo
- // del combobox
-
- SSR1, SSR2 : String; // Le 2 sottostringhe di appoggio per il recupero dei dati
-
- p1, p2, p3 : Integer; // Posizione del carattere #13 (CR) all'interno della stringa
- // di testo del combobox
- begin
- p1 := pos(#13, ComboPluricolonna.Items.Strings[Index]); // Posizione del primo #13
- S1 := copy(ComboPluricolonna.Items.Strings[Index], 1, p1-1); // Recupero campo Cognome
-
- SSR1 := copy(ComboPluricolonna.Items.Strings[Index], p1+1, // Stringa restante che contiene
- length(ComboPluricolonna.Items.Strings[Index])); // ancora i campi Nome, ID e Attivo
-
- p2 := pos(#13, SSR1); // Posizione del secondo #13 che separa Nome da ID
- S2 := copy(SSR1, 1, p2-1); // Recupero campo Nome
-
- SSR2 := copy(SSR1, p2+1, length(SSR1)); // Stringa restante che contiene i campi
- // ID e Attivo
-
- p3 := pos(#13, SSR2); // Posizione dell'ultimo #13
- S3 := copy(SSR2, 1, p3-1); // Recupero del campo ID
-
- S4 := copy(SSR2, p3+1, Length(SSR2)); // Recupero del campo Attivo
-
- with ComboPluricolonna.Canvas do
- begin
- if S4 = 'T' then
- Font.Color := clBlack // colore del font predefinito
- else
- Font.Color := clRed; // colore del font di evidenziazione
- FillRect(Rect);
-
- // Si scrivono i soli campi che ci interessa far vedere
- TextOut(Rect.Left + 2, Rect.Top + 1, S1);
- TextOut(Rect.Left + OffSetColonnaCombo, Rect.Top + 1, S2);
- end;
- end;
-
- procedure TFormComboPluricolonna.ComboPluricolonnaChange(Sender: TObject);
- var
- S1, S2, S3 : String; // Le 3 sottostringhe di cui si compone la stringa di testo
- // del combobox e che ci interessano per la fase di ricerca
-
- SSR1, SSR2 : String; // Le 2 sottostringhe di appoggio per il recupero dei dati
-
- p1, p2, p3 : Integer; // Posizione del carattere #13 (CR) all'interno della stringa
- // di testo del combobox
-
- Index : Integer; // Indice della riga selezionata
-
- ID : Integer; // Campo chiave nascosto alla vista serve per ricercare il record
- // nella tabella
- begin
-
- Data_di_nascita.Clear;
- Luogo_di_nascita.Clear;
- Codice_Fiscale.Clear;
- Utente_Attivo.Font.Color := clBlack;
- Utente_Attivo.Caption := '';
-
- Index := ComboPluricolonna.ItemIndex;
-
- p1 := pos(#13, ComboPluricolonna.Items.Strings[Index]);
- S1 := copy(ComboPluricolonna.Items.Strings[Index], 1, p1-1);
-
- SSR1 := copy(ComboPluricolonna.Items.Strings[Index], p1+1,
- length(ComboPluricolonna.Items.Strings[Index]));
-
- p2 := pos(#13, SSR1);
- S2 := copy(SSR1, 1, p2-1);
-
- SSR2 := copy(SSR1, p2+1, length(SSR1));
-
- p3 := pos(#13, SSR2);
- S3 := copy(SSR2, 1, p3-1);
-
- // Conversione della stringa S3 nel corrispondente valore ID
- ID := StrToInt(S3);
-
- // Ricerca del record corretto nella tabella TablePersone
- if TablePersone.Locate('ID', ID, []) then
- begin
- Data_di_nascita.Text := DateToStr(TablePersone.Fields[3].AsDateTime);
- Luogo_di_nascita.Text := TablePersone.Fields[4].AsString;
- Codice_Fiscale.Text := TablePersone.Fields[5].AsString;
- if TablePersone.Fields[6].AsBoolean then
- Utente_Attivo.Caption := 'Uente attivo'
- else
- begin
- Utente_Attivo.Font.Color := clRed;
- Utente_Attivo.Caption := 'Utente non attivo';
- end;
- end;
- end;
-
- procedure TFormComboPluricolonna.ComboPluricolonnaKeyPress(Sender: TObject;
- var Key: Char);
- begin
- if Key = #13 then
- Data_di_nascita.SetFocus;
- end;
-
- end.
-